package pe.com.pev.gestiondocente.action;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import pe.com.pev.core.action.GenericAction;
import pe.com.pev.core.domain.UsuarioSession;
import pe.com.pev.core.exceptions.BOException;
import pe.com.pev.core.exceptions.DAOException;
import pe.com.pev.core.exceptions.UtilException;
import pe.com.pev.core.service.ServiceUtil;
import pe.com.pev.core.util.StringUtil;
import pe.com.pev.gestiondocente.bo.ProfesorBO;
import pe.com.pev.gestiondocente.domain.Profesor;
import pe.com.pev.util.ComboUtil;
import pe.com.pev.util.Constantes;
import pe.com.pev.util.SelectItem;

@Controller("profesorAction")
@Scope("prototype")
@Results({
	@Result(name="viewFormProfesor",type="tiles", location="viewFormProfesor"),
	@Result(name="viewListProfesor",type="tiles", location="viewListProfesor"),
	@Result(name="listaProfesor",type="json",params={"root","grid"})
})
public class ProfesorAction extends GenericAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	Logger logger = Logger.getLogger(this.getClass());

	@Resource
	private ProfesorBO profesorBO;

	private Long idProfesor;
//	private String nombres;
	private Profesor profesor;
	private Profesor profesorBuscar;
	private List<Profesor> listaProfesor;
	/*private List<SelectItem> listaPadres = new ArrayList<SelectItem>();
	private List<SelectItem> listaTiposModulo = new ArrayList<SelectItem>();*/

	public void cleanForm() {
		setIdProfesor(null);
	//	setNombres("");
	}

	/**
	 * Este metodo se debe ejecutar la primera vez que se invoque al controlador
	 * para poder realizar la carga de data o limpiar datos de session que sean
	 * inecesarios
	 * 
	 * @return
	 */
	
	@Action(value="initProfesor")
	public String init() {
		cleanForm();
		listaProfesor = null;
		return "viewListProfesor";
	}
	
	@Action(value="findAllProfesor")
	public String findAll() {
		try {
			if (profesorBuscar == null) {
				profesorBuscar = new Profesor();
			}
			setGrid(profesorBO.findToGrid(profesorBuscar,getSidx()+" "+getSord(),getPage(),getRows()));
			if(getGrid().getRecords().equals(new Integer(0))){
				addActionError("No se encontraron resultados");
			}
		} catch (BOException e) {
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "listaProfesor";
	}

	@Action(value="newProfesor")
	public String newForm() {
		return "viewFormProfesor";
	}

	@Action(value="updateProfesor")
	public String updateForm() {
		try {
			profesor = profesorBO.findById(idProfesor);
		} catch (BOException e) {
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewFormProfesor";
	}
	
	@Action(value="deleteProfesor")
	public String delete() {
		try {
			profesorBO.deleteLog(Profesor.class, idProfesor);
			addActionMessage("Eliminado Correctamente.");
		} catch (BOException e) {
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		}
		return "viewListProfesor";
	}
	
	@Action(value="saveProfesor")
	public String save() {

		String forward = "";
		String mensaje = "";
		if (profesor.getId() == null) {
			mensaje = "Registrado Correctamente";
		} else {
			mensaje = "Actualizado Correctamente";
		}
		try {
			UsuarioSession usuarioSession = (UsuarioSession) getObjectSession(Constantes.USUARIO_SESSION);
			setCamposAuditoria(profesor, usuarioSession);
			profesorBO.save(profesor);
			listaProfesor = profesorBO.findProfesor(new Profesor());
			addActionMessage(mensaje);
			cleanForm();
			forward = "viewListProfesor";
		} catch (BOException e) {
			forward = "viewFormProfesor";
			addActionError(e.getMessage());
			logger.error(StringUtil.getStackTrace(e));
		} catch (Exception e) {
			logger.error(StringUtil.getStackTrace(e));
		}
		return forward;
	}

	public Profesor getProfesor() {
		return profesor;
	}

	public void setProfesor(Profesor profesor) {
		this.profesor = profesor;
	}

	public Profesor getProfesorBuscar() {
		return profesorBuscar;
	}

	public void setProfesorBuscar(Profesor profesorBuscar) {
		this.profesorBuscar = profesorBuscar;
	}

	public List<Profesor> getListaProfesor() {
		return listaProfesor;
	}

	public void setListaProfesor(List<Profesor> listaProfesor) {
		this.listaProfesor = listaProfesor;
	}

	public ProfesorBO getProfesorBO() {
		return profesorBO;
	}

	public void setProfesoBO(ProfesorBO profesorBO) {
		this.profesorBO = profesorBO;
	}

	@SuppressWarnings("static-access")
	/*public List<SelectItem> getListaTiposModulo() {
		
		listaTiposModulo = ((ServiceUtil) getObjectSession("serviceUtil"))
				.getTipos(Constantes.ID_TABLA_TIPO_MODULO,
						Constantes.VAL_DEFAULT_SELECTION);
		return listaTiposModulo;
	}*/

	/*public void setListaTiposModulo(List<SelectItem> listaTiposModulo) {
		this.listaTiposModulo = listaTiposModulo;
	}*/

	public Long getIdProfesor() {
		return idProfesor;
	}

	/*public List<SelectItem> getListaPadres() {
		try {
			listaPadres = ComboUtil.getSelectItems(moduloBO.findPadres(), "id",
					"descripcion", Constantes.VAL_DEFAULT_SELECTION);
		} catch (UtilException e) {
			e.printStackTrace();
		} catch (BOException e) {
			e.printStackTrace();
		} catch (DAOException e) {
			e.printStackTrace();
		}
		return listaPadres;
	}

	public void setListaPadres(List<SelectItem> listaPadres) {
		this.listaPadres = listaPadres;
	}*/

	public void setIdProfesor(Long idProfesor) {
		this.idProfesor = idProfesor;
	}

/*	public String getNombres() {
		return nombres;
	}

	public void setNombres(String nombres) {
		this.nombres = nombres;
	}*/

}
